sudo -i ส่งคืนข้อผิดพลาด


11

เมื่อฉันพยายามที่จะเปลี่ยนเป็นรูทโดยใช้sudo -iฉันได้รับข้อผิดพลาด/var/tmp/sclDvf3Vx: line 8: -i: command not found... อย่างไรก็ตามsu -งานที่ฉันจะใช้ต่อไป ฉันไม่ได้เป็นผู้ดูแลระบบลินุกซ์ดังนั้นสภาพแวดล้อมยังคงมีหมอกหนาสำหรับฉัน ฉันเดาคำถามของฉัน:

  1. ทำไมข้อผิดพลาดถูกโยน?
  2. ความแตกต่างระหว่างสองคำสั่งคืออะไร?
  3. ทำไมคุณถึงใช้อันอื่น?

ปรับปรุง:

ฉันใช้ CentOS เวอร์ชัน: CentOS รีลีส 6.6 (สุดท้าย)

นี่คือผลลัพธ์จากคำสั่งบางคำสั่งที่ฉันถูกขอให้เรียกใช้ในความคิดเห็นด้านล่าง

  • type sudo : sudo is /opt/centos/devtoolset-1.1/root/usr/bin/sudo
  • sudo -V : /var/tmp/sclIU7gkA: line 8: -V: command not found
  • grep'^root:' /etc/passwd : root:x:0:0:root:/root:/bin/bash

ปรับปรุง:

สิ่งนี้ถูกเพิ่มไปยังผู้ใช้ที่ไม่ใช่รูทของฉัน ~ / .bashrc สักครู่เพราะฉันต้องการการสนับสนุน C ++ 11 เมื่อฉันแสดงความคิดเห็นออกมาอีกครั้งฉันสามารถเรียกใช้ sudo -i ได้โดยไม่มีข้อผิดพลาด

if [ "$(gcc -dumpversion)" != "4.7.2" ]; then 
  scl enable devtoolset-1.1 bash
fi

คุณกำลังตรวจสอบว่า-เป็นจริง (ASCII) -?
ขับขี่เหล็ก

1
มีใครสร้างคำสั่งaliasของคุณsudo?
garethTheRed

2
ตกลงดังนั้นคุณมีคำสั่งท้องถิ่นเรียกว่าsudoซึ่งไม่ใช่คำสั่ง sudo ปกติ เนื่องจากไม่เข้าใจตัวเลือกของ sudo จึงไม่ใช่สิ่งมาตรฐานอย่างชัดเจน ใช้/usr/bin/sudoหรือถามผู้ดูแลระบบในพื้นที่ของคุณ (ใครควรบอกคุณเกี่ยวกับเรื่องนี้เมื่อพวกเขาให้อำนาจแก่คุณ)
Gilles 'ดังนั้นหยุดความชั่วร้าย'

4
ฉันลงคะแนนเพื่อปิดคำถามนี้เป็นหัวข้อนอกเรื่องเนื่องจากเกี่ยวข้องกับโปรแกรมที่รู้จักกันดีในบ้านซึ่งอินเทอร์เน็ตไม่สามารถช่วยเหลือได้
Gilles 'หยุดความชั่วร้าย'

3
ผมไม่คิดว่านี่เป็นบ้านที่ปลูกที่ทุกคนมันเป็นรุ่น CentOS ของRH ผู้พัฒนา Toolset : people.centos.org/tru/devtools-1.1 สันนิษฐานว่าคนบนอินเทอร์เน็ตจะรู้เกี่ยวกับมัน
Michael Homer

คำตอบ:


6

จากความคิดเห็นและการสืบสวนต่อไปของคุณดูเหมือน devtoolset PATHของคุณจะถูกปรับเปลี่ยน น่าเสียดายที่มีสิ่งที่ดูเหมือนจะเป็นคำสั่ง sudo เก่าหรือแตก

การลองปรับเปลี่ยน devtoolset include ใน.bashrcแบบนี้ของคุณนั้นคุ้มค่าแล้วกลับเข้าสู่ระบบอีกครั้ง:

if [ "$(gcc -dumpversion)" != "4.7.2" ]; then 
  scl enable devtoolset-1.1 bash
  PATH=/usr/bin:$PATH    # We need a working sudo
fi

2

แทนที่จะทำงานกับ wrapper sudo ที่เสียของ SCL ฉันก็แค่ปิดมัน

echo >> /opt/rh/devtoolset-2/root/usr/bin/sudo
chmod -x /opt/rh/devtoolset-2/root/usr/bin/sudo

การเพิ่มบรรทัดใหม่ในตอนท้ายของไฟล์ทำให้แน่ใจได้ว่ามันจะไม่ถูกเขียนทับโดยการอัพเดทยำที่ตามมาและจากนั้นฉันเพิ่งทำให้มันไม่สามารถเรียกใช้งานได้

ฉันติดตั้งชุดเครื่องมือ dev เพื่อรับ gcc และ c ++ รุ่นใหม่บน RHEL 6 และไม่มีปัญหาในการคอมไพล์โค้ดโดยไม่ใช้ sudo ปลอมในการผสม


1

ฉันมีปัญหาคล้ายกันกับการsudo -Eตั้งค่าสถานะหลังจากใช้ devtoolset-4 คุณไม่ควรเพิ่มการ-Eตั้งค่าสถานะในกรณีนั้นเนื่องจากมีการเพิ่มใน/opt/rh/devtoolset-4/root/usr/bin/sudoสคริปต์ตัวตัดนี่คือเนื้อหาของมัน:

#! /bin/sh
# TODO: parse & pass-through sudo options from $@
sudo_options="-E"

for arg in "$@"
do
   case "$arg" in
    *\'*)
      arg= ;;
   esac
   cmd_options="$cmd_options '$arg'" 
done
exec /usr/bin/sudo $sudo_options LD_LIBRARY_PATH=$LD_LIBRARY_PATH PATH=$PATH scl enable devtoolset-4 "$cmd_options"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.